#ifndef LOCALDB_H
#define LOCALDB_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QtDebug>
#include <QApplication>
#include <QDir>
#include <QDateTime>



//#include "user.h"
//#include "mychat.h"

struct Friend{
    int id;
    QString name, ip, job;
    void show(){
        qDebug() << id << " " << name << " " << ip << " " << job;
    }
};

struct Group{
    int id;
    QString name, memberlist, category;
    void show(){
        qDebug() << id << " " << name << " " << memberlist << " " << category;
    }
};

struct Message{
    int id, tid, rid;
    QString msg;
    QDateTime time;
    void show(){
        qDebug() << id << " " << tid << " " << rid << " " << msg << " " << time.toString("yyyy-MM-dd hh:mm:ss");
    }
};

struct Category{
    QString id, name;
};

class LocalDB : public QObject
{
    Q_OBJECT
    // 数据库
    QSqlDatabase db;

    // 数据库基本操作
    void CreateDB(QString userId);
    bool OpenDB();
    void CloseDB();
    void ExecSql(QString sql);
//    void Select(QString sql);

    // 初始化数据库，创建基本表：好友、好友分组、群聊、群聊分组、群友、聊天信息
    void Init(QString userId);
    void CreateTableFriend();
//    void CreateTableFriendCategory();
    void CreateTableGroup();
//    void CreateTableGroupCategory();
//    void CreateTableGroupFriend();
    void CreateTableMessage();

public:
    explicit LocalDB(QObject *parent = nullptr);
    // 删除数据库
    void Drop(QString dbName);
    /* 项目需求 */
    // 连接数据库
    void Connect(QString userId);
    // 好友：添加、删除、修改信息、id寻人、获取所有好友信息
    void AddFriend(int id, QString name, QString ip, QString job);
    void AddFriend(Friend frd);
//    void DelFriend(QString id);
//    void UpdFriend(QString id, QString remarks, QString job, QString categoryId, QString chatId);
    Friend GetFriend(int id);
    QVector<Friend> GetAllFriends();

    // 好友分组：添加、删除、改名、根据Id获取信息、根据名称获取信息、获取所有分组信息
//    void AddFriendCategory(QString id, QString name);
//    void DelFriendCategory(QString id);
//    void UpdFriendCategory(QString id, QString newName);
//    Category GetFriendCategoryById(QString id);
//    Category GetFriendCategoryByName(QString name);
//    QVector<Category> GetAllFriendCategory();

    // 群聊：添加、删除、修改信息、id寻群、获取所有群聊信息
    void AddGroup(int id, QString name, QString memberList, QString category);
    void AddGroup(Group gp);
//    void DelGroup(QString id);
//    void UpdGroup(QString id, QString remarks, QString categoryId);
    Group GetGroup(int id);
    QVector<Group> GetAllGroups();

    // 群聊分组：添加、删除、改名、根据Id获取信息、根据名称获取信息、获取所有分组信息
//    void AddGroupCategory(QString id, QString name);
//    void DelGroupCategory(QString id);
//    void UpdGroupCategory(QString id, QString newName);
//    Category GetGroupCategoryById(QString id);
//    Category GetGroupCategoryByName(QString name);
//    QVector<Category> GetAllGroupCategory();

    // 群友：添加、删除、获取某群所有群友信息
//    void AddGroupFriend(QString GroupId, QString GFid);
//    void DelGroupFriend(QString GroupId, QString GFid);
//    QVector<QString> GetGroupFriends(QString id);

    // 聊天信息：添加、删除、倒序取出任意条、取出最末一条
//    void AddMessage(int id, int tid, int rid, QString msg, QDateTime time);
    void AddMessage(Message msg);
    void AddMessages(QVector<Message> msgs);
    int GetMaxMessageId();
//    void DelMessage(QString id);
    QVector<Message> GetSomeRecentMessageByTid(int tid, int num);
    Message GetLastMessageByTid(int tid);
    QVector<Message> GetSomeRecentMessageByRid(int tid, int num);
    Message GetLastMessageByRid(int tid);

signals:

};

#endif // LOCALDB_H
